package 事物操作;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Scanner;

public class Transaction2 {
    public static void main(String[] args){
        String fkf=null;
        String skf=null;
        int rmb=0;
//        接收用户输入Scanner
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入本次的转账金额");
        rmb=sc.nextInt();
        System.out.println("请输入付款方id");
        fkf=sc.next();
        System.out.println("请输入收款方id");
        skf= sc.next();
        System.out.println("正在转账"+rmb+"元");
        String url="jdbc:mysql://localhost:3306/db_jdbc_demo20"+
                "?characterEncoding=utf8&useSSL=false&serverTimezone=UTC";

        String user="root";
        String pass="006688";
        Connection conn=null;
        Statement stmt=null;
//        ResultSet省略，因为Update没有结果集
        try {
            Class.forName("com.mysql.jdbc.Driver");
            conn = DriverManager.getConnection(url, user, pass);
            String sql1="update t_account set money = money -"+rmb+" where id = "+fkf;
            String sql2="update t_account set money = money +"+rmb+" where id = "+skf;
//            开启事务
//            conn.setAutoCommit(false);
            stmt=conn.createStatement();
            int i = stmt.executeUpdate(sql1);
//            int x=5/0;//形成循环错误
            int j = stmt.executeUpdate(sql2);
            if(i+j==2){
                System.out.println("转账成功!");
//                conn.commit();
            }else {
                System.out.println("转账失败!");
            }
        } catch (Exception e) {
//            e.printStackTrace();
            System.out.println("转账出现异常!");
            try {
                conn.rollback();
            }catch (SQLException ex){
                ex.printStackTrace();
            }
        }finally {
            try {
                stmt.close();
                conn.close();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
        }
    }
}
